﻿// CompositeKorean.h: interface for the CCompositeKorean class.
//
//////////////////////////////////////////////////////////////////////

// <조합 전 자소>
//
// 초중종 위치 보존 자모
//
// U+1100~U+1112 ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ (19)
// U+1161~U+1175 ㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣ (21)
// U+11A8~U+11C2 ㄱㄲㄳㄴㄵㄶㄷㄹㄺㄻㄼㄽㄾㄿㅀㅁㅂㅄㅅㅆㅇㅈㅊㅋㅌㅍㅎ (27, 없는 경우 미포함)
//
//
// 초중종 위치 미보존 자모
//
// U+3131~U+314E ㄱㄲㄳㄴㄵㄶㄷㄸㄹㄺㄻㄼㄽㄾㄿㅀㅁㅂㅃㅄㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ (30)
// U+314F~U+3163 ㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣ (21)
//
//
// 이 둘을 모두 처리해야 함
//
//
//
//
// <조합결과>
//
// 초성: ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ (19)
// 중성: ㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣ (21)
// 종성: xㄱㄲㄳㄴㄵㄶㄷㄹㄺㄻㄼㄽㄾㄿㅀㅁㅂㅄㅅㅆㅇㅈㅊㅋㅌㅍㅎ (28, 없는 경우 포함)
// U+AC00: 가

#pragma once

class CComposeKorU
{
public:
	CComposeKorU(void);
	~CComposeKorU(void);

protected:
	signed char *i1stCharTable;
	signed char *i3rdCharTable;
	int iPosIn1st(WCHAR w, BOOL U1100Only);
	int iPosIn2nd(WCHAR w, BOOL U1100Only);
	int iPosIn3rd(WCHAR w, BOOL U1100Only);
	// 첫 두 글자가 초성+중성 조합인가 확인
	bool bIsFirst2Available(WCHAR * w, BOOL U1100Only);
	// 초성+중성 → 한 글자
	WCHAR Composite2(WCHAR * wSrc, BOOL U1100Only);
	// 초성+중성+종성 → 한 글자
	WCHAR Composite3(WCHAR * wSrc, BOOL U1100Only);

public:
	WCHAR * CompositeUniStr(WCHAR * wstr, BOOL U1100Only);
};
